Previous slide Next slide Toggle fullscreen Open presenter view
Introdução à Lógica de Programação
Aula 13 - Arrays (listas)
Helder Jefferson Ferreira da Luz
helder.luz@ifpr.edu.br
Objetivos
Entender o que são arrays (listas) e como manipulá-los no JavaScript.
Arrays (listas)
Array é uma estrutura de dados que armazena uma coleção de elementos em ordem.
Características: mutável, permite elementos duplicados, pode conter tipos mistos (números, strings, objetos, etc.).
É criado utilizando colchetes [ ] ou o construtor Array().
Os arrays possuem funções, chamadas de métodos, que permitem sua manipulação.
Arrays - criação
Exemplo de criação de array
const lista1 = [];
const lista2 = Array ();
const lista3 = [4 , 7 , 8 ];
const lista4 = Array .from (lista3);
Arrays - acessando elementos
O acesso aos elementos do array é feito por meio de índice. No JavaScript moderno, também podemos usar at() para índices negativos.
Índice positivo:
0 início da lista
tamanho - 1 final da lista
Índice negativo:
-tamanho início da lista
-1 final da lista
Exemplo:
const frutas = ["maçã" , "banana" , "laranja" ];
console .log (frutas[0 ]);
console .log (frutas.at (-1 ));
Arrays - operações básicas
Para verificar o tamanho, use a propriedade .length.
const frutas = ["maçã" , "banana" , "laranja" ];
const tamanho = frutas.length ;
console .log (`Número de elementos do array: ${tamanho} ` );
Para verificar se um elemento está presente, use includes().
const numeros = [1 , 2 , 3 ];
console .log (numeros.includes (2 ));
console .log (!numeros.includes (4 ));
Arrays - iteração
Os laços de repetição podem ser usados para iterar pelos elementos de um array.
Exemplo
const numeros = [10 , 20 , 30 , 40 , 50 ];
for (let i = 0 ; i < numeros.length ; i++) {
console .log (numeros[i]);
}
for (const num of numeros) {
console .log (num);
}
Arrays - modificando elementos
Para modificar um elemento existente, use o acesso por índice.
const numeros = [1 , 2 , 3 , 4 , 5 ];
numeros[2 ] = 10 ;
Atenção
Em for...of, a variável do loop é uma cópia do valor; alterar essa variável não altera o array. Use índices, map, ou métodos que retornam novo array.
Arrays - métodos para manipulação
Método
Funcionalidade
push()
adiciona elemento(s) no final
pop()
remove e retorna o último elemento
unshift()
adiciona elemento(s) no início
shift()
remove e retorna o primeiro elemento
indexOf()
retorna o índice da primeira ocorrência
includes()
verifica se contém o elemento (true/false)
splice()
insere/remove elementos em uma posição
slice()
retorna uma cópia fatiada (não altera o original)
concat()
retorna um novo array concatenado
reverse()
inverte o array (modifica o array)
sort()
ordena o array (modifica o array)
join()
junta elementos em string com separador
toSorted()
retorna uma cópia ordenada (não altera o original)
toReversed()
retorna uma cópia invertida (não altera o original)
Arrays - métodos de manipulação
const nomes = ['João' , 'Maria' , 'José' ];
nomes.push ('Ana' );
for (const nome of nomes) {
console .log (nome);
}
nomes.pop ();
const idx = nomes.indexOf ('João' );
if (idx !== -1 ) nomes.splice (idx, 1 );
for (const nome of nomes) {
console .log (nome);
}
Arrays - inserção de valores pelo usuário
Exemplo (browser)
const idades = [];
for (let i = 0 ; i < 5 ; i++) {
const valor = Number (prompt ('Digite uma idade:' ));
if (!Number .isNaN (valor)) {
idades.push (valor);
}
}
console .log (idades);
Arrays - inserção de elemento
const nomes = ['João' , 'Maria' , 'José' , 'Pedro' , 'Ana' ];
nomes.splice (2 , 0 , 'Carlos' );
console .log (nomes);
Arrays - busca de elemento
const nomes = ['João' , 'Maria' , 'José' , 'Pedro' , 'Ana' ];
const indice = nomes.indexOf ('Maria' );
if (indice !== -1 ) {
nomes[indice] = 'Carlos' ;
}
console .log (nomes);
Arrays - limpeza
Esvaziando um array
const nomes = ['João' , 'Maria' , 'José' , 'Pedro' , 'Ana' ];
nomes.length = 0 ;
console .log (nomes);
const nomes2 = ['A' , 'B' ];
nomes2.splice (0 , nomes2.length );
console .log (nomes2);
Arrays - invertendo
const nomes = ['João' , 'Maria' , 'José' , 'João' , 'Pedro' , 'Ana' ];
nomes.reverse ();
console .log (nomes);
const invertido = nomes.toReversed ();
console .log (invertido);
Arrays - ordenando
O método sort() ordena os elementos em ordem alfabética UTF-16. No comportamento padrão, não funciona para ordenar lista de números.
Exemplo - strings (padrão)
const nomes = ['João' , 'Maria' , 'José' , 'João' , 'Pedro' , 'Ana' ];
nomes.sort ();
console .log (nomes);
Exemplo - ordem inversa
const nomes2 = ['João' , 'Maria' , 'José' , 'João' , 'Pedro' , 'Ana' ];
nomes2.sort ().reverse ();
console .log (nomes2);
Arrays - concatenação
Unir dois ou mais arrays em um novo.
Método concat()
const lista1 = [1 , 2 , 3 ];
const lista2 = [4 , 5 , 6 ];
const lista3 = lista1.concat (lista2);
console .log (lista3);
Operador spread ...
const lista4 = [...lista1, ...lista2];
console .log (lista4);
Arrays - fatiamento (slice)
Permite acessar partes específicas de um array sem alterá-lo.
Método: slice(inicio, fim) — retorna elementos de inicio até fim (exclusivo). Aceita índices negativos.
Exemplo
const lista = [1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 ];
console .log (lista.slice (2 ,5 ));
console .log (lista.slice (0 ,5 ));
console .log (lista.slice (5 ));
console .log (lista.slice ());
console .log (lista.slice (0 , -1 ));
Arrays - cópia
Para copiar um array superficialmente use slice() ou spread [...].
Exemplo
const lista = [1 ,2 ,3 ,4 ,5 ,6 ,7 ,8 ,9 ,10 ];
const copia = lista.slice ();
const copia2 = [...lista];
console .log (copia, copia2);
Arrays - passagem por função
function imprimirVetor (vetor ) {
console .log (vetor.join (' ' ));
}
const vetor = [1 ,2 ,3 ,4 ];
imprimirVetor (vetor);
Arrays são objetos mutáveis
Se uma função alterar o array recebido (ex.: vetor.push(5)), a alteração reflete fora da função.
Dúvidas?
Exercícios
Implemente um programa que permita ao usuário adicionar elementos em um array até que decida parar. Em seguida, exiba o array resultante e sua quantidade de elementos.
Leia um array de 12 números e depois dois valores X e Y correspondentes a posições no array. Escreva a soma dos valores nas posições X e Y.
Declare um array e preencha-o apenas com números ímpares informados pelo usuário até ter 10 elementos. Ao final, apresente o array.
Leia um array de 10 números e em seguida um valor X. Busque X e informe a posição em que foi encontrado (ou “não encontrado”) na lista.
Exercícios
Escreva uma função em JavaScript que calcule a média de um array de números.
Escreva uma função que encontre o maior e o menor valor em um array de números.
Implemente um programa que simule uma lista de compras. O usuário deve poder adicionar, remover e visualizar itens a qualquer momento (use push, splice).
Exercícios
Remova todas as ocorrências de um valor X de um array (use for/while e splice).
Insira um novo valor em uma posição P válida, deslocando os demais elementos para a direita (use splice).
Dado dois arrays A e B, crie um terceiro array C com os elementos de A seguidos pelos de B (use concat ou ...).
Inverta um array sem usar reverse() (faça trocas entre o primeiro e o último, avançando para o centro).
Rotacione um array K posições à direita (ex.: [1,2,3,4], K=1 → [4,1,2,3]) usando pop()/unshift().
Exercícios
Mescle dois arrays já ordenados (crescentes) em um novo array também ordenado, sem usar sort() (técnica de “merge”).
Separe um array de números em dois: um com pares e outro com ímpares.
```javascript
const bicicletas = ['trek', 'cannondale', 'redline', 'specialized'];
console.log(bicicletas);
console.log(bicicletas[0]);
```
---
# Arrays - contagem de elementos
##### Exemplo
```javascript
const nomes = ['João', 'Maria', 'José', 'João', 'Pedro', 'Ana'];
const ocorrencias = nomes.filter(n => n === 'João').length;
console.log(ocorrencias); // 2
```
##### Exemplo - números (use função de comparação)
```javascript
const nums = [10, 1, 21, 3];
nums.sort((a, b) => a - b); // crescente
console.log(nums); // [1, 3, 10, 21]
```
// Observação: JS não tem passo (step) em slice; use filter/map ou loops
console.log(lista.filter((_, i) => i % 2 === 0)); // [1,3,5,7,9]
console.log(lista.filter((_, i) => i % 2 === 1)); // [2,4,6,8,10]
console.log([...lista].reverse()); // inverso
```
// cópia profunda (quando há objetos aninhados)
const deep = structuredClone({ a: [1, { b: 2 }] });
```
---
# Ponto e vírgula (`;`) em JavaScript
### Opcional, mas cuidado!
- Em muitos casos, o JavaScript insere automaticamente o ponto e vírgula.
- Porém, a ausência pode causar problemas em situações específicas.
```javascript
// Sem ponto e vírgula
let a = 5
let b = 10
[a, b].forEach(console.log) // Erro: interpretação incorreta
```
```javascript
// Com ponto e vírgula
let a = 5;
let b = 10;
[a, b].forEach(console.log); // Funciona corretamente
```